home *** CD-ROM | disk | FTP | other *** search
-
- /* Read an encoded scan line (all color planes) from a */
- /* PCX-format image file and write the decoded data to a scan */
- /* line buffer */
-
- void pcx_read_line
- (
- unsigned char *linep, /* PCX scan line buffer pointer */
- FILE *fp, /* PCX image file pointer */
- int bpline /* # bytes per line (all color planes) */
- )
- {
- int data; /* Image data byte */
- int count; /* Image data byte repeat count */
- int offset = 0; /* Scan line buffer offset */
-
- while (offset < bpline) /* Decode scan line */
- {
- data = getc(fp); /* Get next byte */
-
- /* If top two bits of byte are set, lower six bits show how */
- /* many times to duplicate next byte */
-
- if ((data & 0xc0) == 0xc0)
- {
- count = data & 0x3f; /* Mask off repeat count */
- data = getc(fp); /* Get next byte */
- memset(linep, data, count); /* Duplicate byte */
- linep += count;
- offset += count;
- }
- else
- {
- *linep++ = (unsigned char) data; /* Copy byte */
- offset++;
- }
- }
- }
-
-